package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.dto.GoodsSalesDTO;
import com.sky.dto.OrdersDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.entity.Orders;
import com.sky.entity.ShoppingCart;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 订单相关SQL
 */
@Mapper
public interface OrderMapper {
       void insertOrder(Orders order);


       /**
        * 根据订单号和用户id查询订单
        * @param orderNumber
        * @param userId
        */
       @Select("select * from orders where number = #{orderNumber} and user_id= #{userId}")
       Orders getByNumberAndUserId(String orderNumber, Long userId);

       /**
        * 修改订单信息
        * @param orders
        */
       void update(Orders orders);


       /**
        * 订单分页查询。
        * @param ordersPageQueryDTO ordersPageQueryDTO
        * @return ordersPageQueryDTO
        */
     /*  Page<OrdersDTO> selectByPageSearch(OrdersPageQueryDTO ordersPageQueryDTO);*/

       Page<Orders> pageQuery(OrdersPageQueryDTO ordersPageQueryDTO);


       /**
        * 根据id查询订单
        * @param id
        */
       @Select("select * from orders where id=#{id}")
       Orders getById(Long id);


       /**
        * 根据状态统计订单数量
        * @param status
        */
       @Select("select count(id) from orders where status = #{status}")
       Integer countStatus(Integer status);


       /**
        * 根据状态和下单时间查询订单
        */
       @Select("select * from orders where status = #{pendingPayment} and order_time < #{minusMinutes}")
    List<Orders> selectProcessTimeOrder(Integer pendingPayment, LocalDateTime minusMinutes);

    Double sumByMap(Map map);

       /**
        * 统计订单
        * @param map
        * @return
        */
    Integer countOrders(Map map);


    /**
     * 查询商品销量排名
     * @param begin
     * @param end
     */
    List<GoodsSalesDTO> getSalesTop10(LocalDateTime begin, LocalDateTime end);
}
